DevSecOps_05_Secret 탐지의 한계와 엔트로피(Entropy)
소스 코드에 하드코딩된 API 키, 비밀번호, 인증서 등의 비밀 정보(Secret)는 해커들의 가장 쉬운 먹잇감이다. 이를 탐지하는 Secret Scanning 도구들은 어떤 원리로 동작할까? 그리고 왜 여전히 오탐과 미탐 사이에서 줄타기를 해야 할까?
1. 정규표현식(Regex) 기반 탐지
가장 전통적인 방식은 패턴 매칭이다. AWS Access Key처럼 형식이 정해진 키는 찾기 쉽다.
AKIA[0-9A-Z]{16}
이 방식은 패턴이 명확한 클라우드 키 식별에는 매우 강력하다. 하지만 "패스워드"처럼 형식이 정해지지 않은 문자열을 찾는 데는 한계가 있다. password = "1234"와 password_label = "Password input"을 구별하기 어렵기 때문이다.
2. 섀넌 엔트로피(Shannon Entropy)
형식이 없는 랜덤한 문자열(고유한 키 값)을 찾기 위해 엔트로피(무질서도) 개념을 사용한다.
사람이 쓰는 언어(영어, 한국어)는 자주 쓰는 문자가 정해져 있어 엔트로피가 낮다. 반면, 암호화 키나 해시값은 문자가 무작위로 섞여 있어 엔트로피가 극도로 높다.
Hello World: 엔트로피 낮음z8/X9+kL2m: 엔트로피 높음
도구는 코드 내 문자열의 엔트로피를 계산하여, 특정 임계값(Threshold)을 넘는 문자열을 "비밀 정보 후보"로 식별한다.
3. 문맥(Context)의 중요성
하지만 엔트로피만으로는 부족하다. image_data = "xF2..." 같은 바이너리 데이터나 인코딩된 문자열도 엔트로피가 높기 때문이다.
따라서 최신 탐지 엔진은 변수명(Context)과 엔트로피를 결합한다.
- 변수명이
api_key,secret,password등을 포함하는가? - 할당된 값의 엔트로피가 높은가?
이 두 가지 조건이 모두 충족될 때 비로소 경고를 띄움으로써 정확도를 높인다. 단순한 검색을 넘어 확률과 통계를 결합한 것이 Secret Scanning의 본질이다.